﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using BLL;
using VentaPorCatalogos.UserControls;
using BE.SearchCriteria;
using BLL.Exceptions;

namespace VentaPorCatalogos.Pages
{
    public partial class Pedidos : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    ViewState.Add("FormBehavior", behavior.Initial);                    
                    Session["Model"] = null;
                    
                    // TODO solo si el perfil es vendedor
                    if (this.GetPerfil().ToLower().Equals("vendedor"))
                    {
                        BuscarVendedorUsuarioLogueado();
                    }
                    
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            ConfigurarFormBehaviour();
        }

        #region "Buttons"

        protected void botComandos_OnBotonClick(object sender, BotoneraEventArgs e)
        {
            try
            {
                behavior wComportamiento;
                PedidoModel oPedidoModel;
                
                switch (e.Boton)
                {
                    case BotonesTipos.Buscar:
                        if (BuscarElemento())
                            SetFormBehaviour(behavior.View);
                        else
                            e.CancelarOperacion = true;  // Evita que la botonera pase a modo consulta, si no se encontró un elemento.                        
                        break;
                    case BotonesTipos.Nuevo:
                        BlanquearControles();
                        txtFechaPedido.Text  = DateTime.Today.ToShortDateString();

                        oPedidoModel = GetModel<PedidoModel>();
                        if (oPedidoModel == null) // si perfil es gerente, esta vacio
                        {
                            oPedidoModel = new PedidoModel();
                            SetModel<PedidoModel>(oPedidoModel);
                        }
                        
                        oPedidoModel.oPedidoBE = new PedidoBE();                        
                        oPedidoModel.oPedidoBE.FechaPedido = DateTime.Now;                        
                        oPedidoModel.oPedidoBE.ListPedidoArticulo = new List<PedidoArticuloBE>();
                        if (oPedidoModel.oVendedorBE != null)
                            oPedidoModel.oPedidoBE.pVendedorBE = oPedidoModel.oVendedorBE;
                        SetModel<PedidoModel>(oPedidoModel);
                        divFilter.Visible = true;
                        divArticulosFiltrados.Visible = true;
                        //divAgregar.Visible = true;

                        HabilitarControles(true);
                        
                        if (this.GetPerfil().ToLower().Equals("vendedor"))
                        {
                            btnSelVendedor.Enabled = false;
                        }
                        SetFormBehaviour(behavior.New);
                        CargarGrillaPedidosArticulos();
                        break;

                    case BotonesTipos.Editar:
                        SetFormBehaviour(behavior.Edit);
                        //HabilitarControles(true);
                        HabilitarControles(false, divPedido.Controls);
                        divFilter.Visible = true;
                        //divAgregar.Visible = true;
                        divArticulosFiltrados.Visible = true;                        
                        gdvArticulos.DataSource = new List<ArticulosCampañaBE>();
                        gdvArticulos.DataBind();

                        btnSelVendedor.Enabled = false;
                        //gdvPedidos.Columns[0].Visible = true;
                        
                        break;

                    //case BotonesTipos.Eliminar:
                    //    PedidoBLL.DeletePedido(GetModel<PedidoBE>());
                    //    SetModel<PedidoBE>(null);
                    //    SetFormBehaviour(behavior.Initial);
                    //    break;

                    case BotonesTipos.Aceptar:
                        wComportamiento = (behavior)ViewState["FormBehavior"];
                        switch (wComportamiento)
                        {
                            case behavior.New:
                                oPedidoModel = GetModel<PedidoModel>();
                                if (oPedidoModel != null)
                                {
                                    PedidoBLL.InsertarPedido(oPedidoModel.oPedidoBE);
                                }
                                divFilter.Visible = false;
                                MostrarMensaje("Pedido registrado correctamente");
                                hidIdElemento.Value = oPedidoModel.oPedidoBE.IdPedido.ToString();
                                BuscarElemento();
                                break;
                            case behavior.Edit:
                                oPedidoModel = GetModel<PedidoModel>();
                                PedidoBLL.Modificar(oPedidoModel.oPedidoBE);
                                divFilter.Visible = false;
                                MostrarMensaje("Pedido modificado correctamente");
                                break;
                        }
                        divAgregar.Visible = false;
                        divArticulosFiltrados.Visible = false;
                        SetFormBehaviour(behavior.View);

                        break;
                    case BotonesTipos.Cancelar:
                         wComportamiento = GetFormBehaviour();
                         HabilitarControles(false);
                         //divArticulosFiltrados.Visible = false;
                        switch (wComportamiento)
                        {
                            case behavior.Edit:
                                BuscarElemento();
                                SetFormBehaviour(behavior.View);
                                break;
                            case behavior.New:
                                BlanquearControles();
                                SetFormBehaviour(behavior.Initial);
                                break;
                            default:
                                break;
                        }
                        break;
                        
                    default:
                        break;
                }
            }

            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception)
            {
                MostrarMensaje("Se ha producido un inconveniente procesando la operación. Por favor intente nuevamente.");
            }
        }

        private void BlanquearControles()
        {
            if (!this.GetPerfil().ToLower().Equals("vendedor"))
                base.BlanquearControles(divPedido.Controls);
            base.BlanquearControles(divFilter.Controls);
            ddlCampaña.SelectedValue = "";
            gdvArticulos.DataSource = new List<ArticulosCampañaBE>();
            gdvArticulos.DataBind();
            gdvPedidos.DataSource = new List<PedidoArticuloBE>();
            gdvPedidos.DataBind();

        }

        /// <summary>
        /// Valida que no se ingrese mas de un pedido para un vendedor y campaña
        /// </summary>
        private bool ValidarPedidoExistente(int pIdCampaña, int pIdVendedor)
        {
            PedidoSC oPedidoSC = new PedidoSC();
            List<PedidoBE> wListPedidoBE = null;

            oPedidoSC.IdCampaña = pIdCampaña;
            oPedidoSC.IdVendedor = pIdVendedor;
            oPedidoSC.Estado = (int)EstadosPedidos.Pendiente;

            int wCountReg = 0;
            wListPedidoBE = PedidoBLL.SeleccionarTodos(oPedidoSC, 0, null, ref wCountReg);

            if (wListPedidoBE != null)
            {
                if (wListPedidoBE.Count != 0)
                    return true;
            }

            return false;
        }


        private bool BuscarElemento()
        {
            try
            {
                int id;
                if (!int.TryParse(hidIdElemento.Value, out id))
                    return false;

                // Limpiar los controles
                txtIdVendedor.Text = string.Empty;
                txtNombre.Text = string.Empty;
                lblZona.Text = string.Empty;
                txtFechaCierre.Text = string.Empty;
                ddlCampaña.Items.Clear();

                PedidoModel oPedidoModel = new PedidoModel();
                SetModel<PedidoModel>(oPedidoModel);

                PedidoBE oPedidoBE = new PedidoBE();
                oPedidoBE.IdPedido = id;

                oPedidoBE = PedidoBLL.SeleccionarPorId(oPedidoBE);
                if (oPedidoBE == null)
                    return false;

                oPedidoModel.oPedidoBE = oPedidoBE;
                // Mostrar datos del vendedor y campaña
                if (oPedidoBE.pVendedorBE != null)
                {
                    txtIdVendedor.Text = oPedidoBE.pVendedorBE.IdVendedor.ToString();
                    txtNombre.Text = oPedidoBE.pVendedorBE.ApellidoNombre;
                    if (oPedidoBE.pVendedorBE.oAreaBE != null && oPedidoBE.pVendedorBE.oAreaBE.oZonaBE != null)
                        lblZona.Text = oPedidoBE.pVendedorBE.oAreaBE.oZonaBE.Descripcion;
                    oPedidoModel.oVendedorBE = oPedidoBE.pVendedorBE;
                }                
                
                if (oPedidoBE.pCampañaBE != null)
                {
                    BuscarCampañasPorZona();
                    ddlCampaña.Items.Clear();
                    ddlCampaña.Items.Add(new ListItem("Seleccione....", string.Empty));
                    ddlCampaña.Items.Add(new ListItem(oPedidoBE.pCampañaBE.Descripcion, oPedidoBE.pCampañaBE.IdCampaña.ToString()));
                    ddlCampaña.SelectedValue = oPedidoBE.pCampañaBE.IdCampaña.ToString();

                    if (oPedidoModel.listCampañasZonasCierresBE != null)
                    {
                        CampañasZonasCierresBE oCampañasZonasCierresBE;
                        oCampañasZonasCierresBE = oPedidoModel.listCampañasZonasCierresBE.FirstOrDefault(x => x.IdCampaña == oPedidoBE.pCampañaBE.IdCampaña);
                        if (oCampañasZonasCierresBE != null)
                            txtFechaCierre.Text = oCampañasZonasCierresBE.FechaCierre.Value.ToShortDateString();
                    }
                }

                 
                // Mostrar datos del pedido
                txtIdPedido.Text = oPedidoBE.IdPedido.ToString();
                txtCantidad.Text = oPedidoBE.CantidadArticulos.ToString();
                txtImporte.Text = oPedidoBE.Importe.ToString("C2");
                txtFechaPedido.Text = oPedidoBE.FechaPedido.ToShortDateString();

                // Cargar la grilla pedidos
                gdvPedidos.DataSource = oPedidoBE.ListPedidoArticulo;
                gdvPedidos.DataBind();

                SetModel<PedidoModel>(oPedidoModel); 

                divFilter.Visible = false;
                divAgregar.Visible = false;
                
                //gdvPedidos.Columns[0].Visible = false;
                

                return true;
            }

            catch (Exception)
            {
                throw;
            }

            //return false;
        }


        private void BuscarVendedorUsuarioLogueado()
        {
            // obtengo el vendedor del usuario logueado 
            UsuarioBE oUsuarioBE = null;
            VendedorBE oVendedorBE = new VendedorBE();
            oUsuarioBE = (UsuarioBE)Session["User"];
            PedidoModel oPedidoModel = new PedidoModel(); //GetModel<PedidoModel>();
            PedidoBE oPedidoBE = new PedidoBE(); //oPedidoModel.oPedidoBE;
            if (oUsuarioBE != null)
            {
                // busco los datos del vendedor 
                oVendedorBE.IdVendedor = oUsuarioBE.IdVendedor;
                oVendedorBE = VendedorBLL.SeleccionarPorId(oVendedorBE);
                txtIdVendedor.Text = oVendedorBE.IdVendedor.ToString();
                txtNombre.Text = oVendedorBE.ApellidoNombre;
                oPedidoBE.pVendedorBE = oVendedorBE;
                oPedidoModel.oVendedorBE = oVendedorBE;                
                lblZona.Text = oVendedorBE.oAreaBE.oZonaBE.Descripcion;
            }
            oPedidoModel.oPedidoBE = oPedidoBE;
            SetModel<PedidoModel>(oPedidoModel);

            BuscarCampañasPorZona();
        }

        private void BuscarCampañasPorZona()
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            if (oPedidoModel.oPedidoBE == null)
                return;
            if (oPedidoModel.oPedidoBE.pVendedorBE == null)
                return;

            CampañasZonasCierresBE oCampañasZonasCierresBE = new CampañasZonasCierresBE();
            List<CampañasZonasCierresBE> oListCampañasZonasCierresBE = new List<CampañasZonasCierresBE>();

            // campaña
            oCampañasZonasCierresBE.oZonasBE = new ZonasBE();
            oCampañasZonasCierresBE.oCampañaBE = new CampañaBE();
            oCampañasZonasCierresBE.oZonasBE = oPedidoModel.oPedidoBE.pVendedorBE.oAreaBE.oZonaBE;
            oCampañasZonasCierresBE.oCampañaBE.Cerrado = false;
            oListCampañasZonasCierresBE = CampañasZonasCierresBLL.SeleccionarPorZonaCampaña(oCampañasZonasCierresBE);
            CargarCampañas(oListCampañasZonasCierresBE);
            oPedidoModel.listCampañasZonasCierresBE = oListCampañasZonasCierresBE;
        }

        private void ConfigurarFormBehaviour()
        {
            behavior wComportamiento;
            wComportamiento = GetFormBehaviour();
            switch (wComportamiento)
            {
                case behavior.Initial:
                    HabilitarControles(false);
                    //divFilter.Visible = false;
                    divAgregar.Visible = false;
                    gdvPedidos.Columns[gdvPedidos.Columns.Count - 1].Visible = false;
                   
                    break;

                case behavior.New:
                    
                    // Pendiente blanquear controles
                    //BlanquearControles(divCampos.Controls);

                    // TODO deshabilitar   btnbusqueda vendedor si el perfil no es gerente
                    //HabilitarControles(true);
                    gdvPedidos.Columns[gdvPedidos.Columns.Count - 1].Visible = true;
                    break;

                case behavior.Edit:
                    // TODO deshabilitar   btnbusqueda vendedor si el perfil no es gerente                    
                    gdvPedidos.Columns[gdvPedidos.Columns.Count - 1].Visible = true;
                    break;

                case behavior.View:
                    HabilitarControles(false);
                    gdvPedidos.Columns[gdvPedidos.Columns.Count - 1].Visible = false;
                    break;
            }
        }     
        #endregion

        protected void btnAgregar_Click1(object sender, EventArgs e)
        {
            string wCodArticulo = string.Empty;

            try
            {
                PedidoModel oPedidoModel = GetModel<PedidoModel>();                
                PedidoArticuloBE oPedidoArticuloBE = null;
                
                PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;
                if (oPedidoBE != null)
                {                    
                    var drArticulosSeleccionados = (from GridViewRow w in gdvArticulos.Rows where ((CheckBox)w.Cells[gdvArticulos.Columns.Count - 1] .FindControl("ckbSeleccion")).Checked  == true select w);

                    foreach (GridViewRow oRow in drArticulosSeleccionados)
                    {
                        wCodArticulo = (string)gdvArticulos.DataKeys[oRow.RowIndex].Value;
                        ArticulosCampañaBE oACBE = oPedidoModel.listArticulosCampañaBE.Find(x => x.CodArticulo == wCodArticulo);

                        // Validar que el pedido no exista
                        if (ValidarArticuloPedido(oACBE.CodArticulo))
                        {
                            MostrarMensaje("El Artículo que desea ingresar ya se encuentra en la lista.");
                            return;
                        }

                        if (oACBE != null)
                        {
                            oPedidoArticuloBE = new PedidoArticuloBE();
                            oPedidoArticuloBE.Articulo = oACBE.Articulo;
                            oPedidoArticuloBE.PrecioUnitario = oACBE.Precio;
                            oPedidoArticuloBE.Cantidad = 1;

                            oPedidoBE.ListPedidoArticulo.Add(oPedidoArticuloBE);

                            MostrarTotales();
                            // eliminar lista ArticulosCampañaBE
                            oPedidoModel.listArticulosCampañaBE.Remove(oACBE);
                            ddlCampaña.Enabled = false;
                        }
                    }
                    gdvArticulos.DataSource = oPedidoModel.listArticulosCampañaBE;
                    gdvArticulos.DataBind(); 

                    gdvPedidos.DataSource = oPedidoBE.ListPedidoArticulo;
                    gdvPedidos.DataBind();

                    MostrarTotales();
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        private void MostrarTotales()
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;

            if (oPedidoBE == null)
                return;

            PedidoBLL.CalcularTotales(oPedidoBE);

            txtCantidad.Text = oPedidoBE.CantidadArticulos.ToString();
            txtImporte.Text = oPedidoBE.Importe.ToString("C2");
        }

        protected void gdvPedidos_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gdvPedidos.EditIndex = e.NewEditIndex;
            CargarGrillaPedidosArticulos();
        }

        protected void gdvPedidos_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int wCantidad ;
            TextBox tx1 = (TextBox)gdvPedidos.Rows[e.RowIndex].FindControl("txtCantidadRow");
            string wCodArticulo = (string)gdvPedidos.DataKeys[e.RowIndex].Value;


            if (!int.TryParse(tx1.Text, out wCantidad))
            {
                e.Cancel = true;
                MostrarMensaje("Debe ingresar una cantidad válida.");
                return; 
            } 

            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;
            PedidoArticuloBE oPedidoArticuloBE = oPedidoBE.ListPedidoArticulo.Find(x => x.CodArticulo == wCodArticulo);
            if (oPedidoArticuloBE != null)
            {
                oPedidoArticuloBE.Cantidad = wCantidad;
            }
            SetModel<PedidoModel>(oPedidoModel); 
            gdvPedidos.EditIndex = -1;
            CargarGrillaPedidosArticulos();

            MostrarTotales();
        }

        protected void gdvPedidos_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string wCodArticulo = (string)gdvPedidos.DataKeys[e.RowIndex].Value;

            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;
            PedidoArticuloBE oPedidoArticuloBE = oPedidoBE.ListPedidoArticulo.Find(x => x.CodArticulo == wCodArticulo);
            if (oPedidoArticuloBE != null)
            {
                oPedidoBE.ListPedidoArticulo.Remove(oPedidoArticuloBE);
            }
            SetModel<PedidoModel>(oPedidoModel);
            CargarGrillaPedidosArticulos();

            MostrarTotales();
        }

        protected void gdvPedidos_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gdvPedidos.EditIndex = -1;
        }



        private void CargarGrillaPedidosArticulos()
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;
            gdvPedidos.DataSource = oPedidoBE.ListPedidoArticulo;
            gdvPedidos.DataBind();
  
        }

        private bool ValidarArticuloPedido(String pCodArticulo)
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();
            PedidoBE oPedidoBE = oPedidoModel.oPedidoBE;

            if (oPedidoBE.ListPedidoArticulo != null && oPedidoBE.ListPedidoArticulo.Count > 0)
            {
                PedidoArticuloBE oPedidoArticuloBE = oPedidoBE.ListPedidoArticulo.Find(x => x.CodArticulo == pCodArticulo);

                if (oPedidoArticuloBE != null)
                {
                    return true;
                }
            }

            return false;
        }

        protected void btnSelRubro_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtRubro.Text.Trim().Length > 0)
            {
                RubroSC wFiltroSC = new RubroSC();
                wFiltroSC.Descripcion = txtRubro.Text;
                List<RubroBE> wListResultado = RubroBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdRubro.Value = wListResultado[0].IdRubro.ToString();
                        txtRubro.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarRubro(\"{0}\");", txtRubro.Text));
                }
                else
                {
                    txtRubro.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarRubro(\"{0}\");", txtRubro.Text));
            }


        }

        protected void gdvPedidos_RowCreated(object sender, GridViewRowEventArgs e)
        {


        }

        private void CargarCampañas(List<CampañasZonasCierresBE> pListCampañasZonasCierresBE)
        {
            ddlCampaña.Items.Clear();
            ddlCampaña.Items.Add(new ListItem("Seleccione....", string.Empty));
            ddlCampaña.AppendDataBoundItems = true;
           // utilizando la zona del vendedor logueado cargo las campañas
            ddlCampaña.DataSource = pListCampañasZonasCierresBE;
            ddlCampaña.DataValueField = "IdCampaña";
            ddlCampaña.DataTextField = "Descripcion";
            ddlCampaña.DataBind();

            
        }

        protected void ddlCampaña_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                txtFechaCierre.Text = String.Empty;
 
                int wIdCampaña;
                CampañaBE oCampaña = new CampañaBE();
                if (!int.TryParse(ddlCampaña.SelectedValue, out wIdCampaña))
                    return;

                PedidoModel oPedidoModel = GetModel<PedidoModel>();
                if (oPedidoModel.oPedidoBE.pVendedorBE == null)
                    return;

                if (ValidarPedidoExistente(wIdCampaña, oPedidoModel.oPedidoBE.pVendedorBE.IdVendedor.Value))
                {
                    MostrarMensaje("Ya existe un pedido para la campaña seleccionada.");
                    ddlCampaña.SelectedValue = "";
                }
                else
                {
                    
                    oCampaña.IdCampaña = wIdCampaña;
                    oCampaña= CampañaBLL.SeleccionarPorId(oCampaña);
                    if (oPedidoModel.oPedidoBE != null)
                        oPedidoModel.oPedidoBE.pCampañaBE = oCampaña;

                    //CargarFechaCierre(oCampaña);
                    List<CampañasZonasCierresBE> olistCampañasZonasCierresBE;
                    olistCampañasZonasCierresBE = oPedidoModel.listCampañasZonasCierresBE;

                    if (olistCampañasZonasCierresBE != null)
                    {
                        CampañasZonasCierresBE oCampañasZonasCierresBE;
                        oCampañasZonasCierresBE = olistCampañasZonasCierresBE.First(x => x.IdCampaña == oCampaña.IdCampaña);
                        if (oCampañasZonasCierresBE != null)
                            txtFechaCierre.Text = oCampañasZonasCierresBE.FechaCierre.Value.ToShortDateString();
                    }
                   

                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

       

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();

            if (oPedidoModel.oPedidoBE.pCampañaBE == null)
            {
                MostrarMensaje("Debe seleccionar una campaña.");
                return;
            }

            ArticuloBE oAuxArticuloBE = new ArticuloBE();
            oAuxArticuloBE.CodArticulo = txtIdArticulo.Text;

            ArticulosCampañaSC wFiltroSC = new ArticulosCampañaSC();
            if (oAuxArticuloBE.IdArticulo != 0)
                wFiltroSC.IdArticulo = oAuxArticuloBE.IdArticulo;
            if (oAuxArticuloBE.Presentacion.IdPresentacion != 0)
                wFiltroSC.IdPresentacion = oAuxArticuloBE.Presentacion.IdPresentacion;

            wFiltroSC.IdCampaña = oPedidoModel.oPedidoBE.pCampañaBE.IdCampaña;
            wFiltroSC.Pagina = !String.IsNullOrEmpty(lblPagina.Text) ? lblPagina.Text : null;
            if (!string.IsNullOrEmpty(hidIdRubro.Value))
                wFiltroSC.IdRubro = Convert.ToInt32(hidIdRubro.Value);
            wFiltroSC.Descripcion = !String.IsNullOrEmpty(txtDescripcion.Text) ? txtDescripcion.Text : null;

            List<ArticulosCampañaBE> wListResultado = ArticulosCampañasBLL.BuscarArticulosCampaña(wFiltroSC);
            oPedidoModel.listArticulosCampañaBE = wListResultado;
            gdvArticulos.DataSource = wListResultado;
            gdvArticulos.DataBind();

            
            divAgregar.Visible = wListResultado != null && wListResultado.Count > 0;

            if (wListResultado == null || wListResultado.Count == 0)
                MostrarMensaje("No se han encontrado resultados.");

            SetModel<PedidoModel>(oPedidoModel);
        }

        protected void btnSelVendedor_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            int wIdVendedor;
            if (int.TryParse(txtIdVendedor.Text, out wIdVendedor))
            {
                MostrarVendedorSeleccionado();
                return;
            }

            if (txtNombre.Text.Trim().Length > 0)
            {
                VendedorSC wFiltroSC = new VendedorSC();
                wFiltroSC.Apellido = txtNombre.Text;
                List<VendedorBE> wListResultado = VendedorBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        txtIdVendedor.Text = wListResultado[0].IdVendedor.ToString();
                        txtNombre.Text = wListResultado[0].ApellidoNombre;
                        MostrarVendedorSeleccionado();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtNombre.Text));
                }
                else
                {
                    txtNombre.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtNombre.Text));
            }

        }

        private void MostrarVendedorSeleccionado()
        {
            PedidoModel oPedidoModel = GetModel<PedidoModel>();

            txtNombre.Text = string.Empty;
            lblZona.Text = string.Empty;

            if (oPedidoModel == null || oPedidoModel.oPedidoBE == null)
                return;

            oPedidoModel.oPedidoBE.pVendedorBE = null;
            oPedidoModel.oVendedorBE = null;

            int wIdVendedor;            
            if (!int.TryParse(txtIdVendedor.Text, out wIdVendedor))
                return;
            // busco los datos del vendedor 
            VendedorBE oVendedorBE = new VendedorBE();            
            oVendedorBE.IdVendedor = wIdVendedor;
            oVendedorBE = VendedorBLL.SeleccionarPorId(oVendedorBE);
            if (oVendedorBE != null)
            {
                // Muestro los datos del vendedor
                txtIdVendedor.Text = oVendedorBE.IdVendedor.ToString();
                txtNombre.Text = oVendedorBE.ApellidoNombre;
                lblZona.Text = oVendedorBE.oAreaBE.oZonaBE.Descripcion;
                // Asigno al modelo los datos del vendedor
                oPedidoModel.oPedidoBE.pVendedorBE = oVendedorBE;
                oPedidoModel.oVendedorBE = oVendedorBE;
            }
            BuscarCampañasPorZona();
            
        }

        private void HabilitarControles(bool pEstado)
        {
            base.HabilitarControles(pEstado, divPedido.Controls);
        }


        protected string GetSelVendedorPostBack()
        {
            return Page.ClientScript.GetPostBackEventReference(btnSelVendedor, string.Empty);
        }
      
   }       
}